package com.xp.tinyurl.service;

import com.xp.tinyurl.common.cache.MaxUuidCache;
import com.xp.tinyurl.dao.MaxUuidDao;
import com.xp.tinyurl.model.MaxUuid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

@Service
public class MaxUuidService {

    @Autowired
    private MaxUuidCache maxUuidCache;

    @Autowired
    private MaxUuidDao maxUuidDao;

    public synchronized long getMaxUuid(){
        long uuid = maxUuidCache.get();
        if(uuid == 0){
            List<MaxUuid> maxUuidList = maxUuidDao.select(null);
            MaxUuid maxUuid = maxUuidList.get(0);
            maxUuidCache.initIfAbsent(maxUuid.getUuid());
        }
        maxUuidCache.increment();
        return maxUuidCache.get();
    }

    public void cache2db(){
        long uuid = maxUuidCache.get();
        if(uuid <= 0){
            return;
        }
        List<MaxUuid> maxUuidList = maxUuidDao.select(null);
        MaxUuid maxUuid = maxUuidList.get(0);
        maxUuid.setUuid(uuid);
        maxUuid.setModifyTime(new Date());
        maxUuidDao.updateByPrimaryKeySelective(maxUuid);
    }

}
